<template>
  <div>
    <div class="select-box">
      <!-- 选择年的下拉框 -->
      <el-select v-model="currentYear" size="small" @change="handleChange">
        <el-option v-for="item in yearList" :key="item" :label="item" :value="item" />
      </el-select>
      <!-- 选择月的下拉框 -->
      <el-select v-model="currentMonth" size="small" @change="handleChange">
        <el-option v-for="item in 12 " :key="item" :label="item" :value="item" />
      </el-select>
    </div>
    <!-- 日历组件 -->
    <el-calendar v-model="value">
      <!-- 作用域插槽 dateCell -->
      <template #dateCell="{date, data}">
        <!-- {{ date }} -- 是 日期对象 -->
        <!-- {{ data }} 是一个对象里面有 有三个字段 day 字符串的日期 -->
        <div class="date-content">
          <span class="text">{{ data.day | canlendarTime }}</span>
          <span v-if="isWeek(date)" class="rest">休</span>
          <!-- 模拟排班表 -->
          <!-- <span v-if="isWeek(data.day)" class="rest">休</span> -->
        </div>
      </template>
    </el-calendar>
  </div>
</template>

<script>
export default {
  name: 'Work',
  filters: {
    canlendarTime(val) {
      let str = val.split('-')[2]
      // 检测字符串是否以0开始  startsWith是返回true, 不是就返回false
      // console.log(str)
      str = str.startsWith('0') ? str.slice(1) : str
      return str
    }
  },
  props: {
    date: {
      type: Date,
      default: () => {
        return new Date()
      }
    }
  },
  data() {
    return {
      currentYear: '', // 下拉框双向绑定的年
      currentMonth: '', // 下拉框双向绑定的月
      value: ''
      // restList: ['2021-07-10', '2021-07-20', '2021-07-25'] // 模拟排班表
    }
  },
  computed: {
    //  需求: yearList动起来  前五年 + 今年 +  后五年
    //  Array.from()
    yearList() {
      return Array.from(new Array(11), (item, index) => index + this.currentYear - 5)
    }
  },
  watch: {
    value(newVal) { // 使用侦听器,侦听日期组件双向绑定的value,最新的值是日期对象
      // console.log(newVal)
      this.currentYear = newVal.getFullYear()
      this.currentMonth = newVal.getMonth() + 1
    }
  },
  created() {
    // 将父组件传递过来的日期对象的年和月 赋值给 data中的 currentYear . currentMonth
    this.currentYear = this.date.getFullYear()
    this.currentMonth = this.date.getMonth() + 1
  },
  methods: {
    // 不论修改年 还是修改月 都会触发这个方法,在这个方法中获取选中的年和月
    handleChange() {
      // console.log(this.currentYear)
      // console.log(this.currentMonth)
      // 将拿到的最新的年和月 处理成一个日期对象 交给日历组件双向绑定的value 2021-3-1
      this.value = new Date(`${this.currentYear}-${this.currentMonth}-1`)
    },
    isWeek(date) {
      if (date.getDay() === 6 || date.getDay() === 0) {
        return true
      } else {
        return false
      }
    }

    // 模拟排班表
    // isWeek(date) {
    //   console.log(date)
    //   return this.restList.includes(date)
    // }
  }
}
</script>

<style lang="scss" scoped>
.select-box {
  display: flex;
  justify-content: flex-end;
}

::v-deep .el-calendar-day {
  height:  auto;
 }
::v-deep .el-calendar-table__row td::v-deep .el-calendar-table tr td:first-child, ::v-deep .el-calendar-table__row td.prev{
  border:none;
 }
.date-content {
  height: 40px;
  text-align: center;
  line-height: 40px;
  font-size: 14px;
}
.date-content .rest {
  color: #fff;
  border-radius: 50%;
  background: rgb(250, 124, 77);
  width: 20px;
  height: 20px;
  line-height: 20px;
  display: inline-block;
  font-size: 12px;
  margin-left: 10px;
}
.date-content .text{
  width: 20px;
  height: 20px;
  line-height: 20px;
 display: inline-block;

}
::v-deep .el-calendar-table td.is-selected .text{
   background: #409eff;
   color: #fff;
   border-radius: 50%;
 }
::v-deep .el-calendar__header {
   display: none
 }
</style>
